package org.uca.dss.curso1011.grupo3.gestionreservas;

import org.joda.time.LocalDate;
import org.joda.time.LocalTime;

/**
 * Esta clase implementa cada una de las reservas para un viaje. La definimos
 * como final para que sólo sea posible inicializarla con el constructor, pero
 * los metodos no pueden modificarla. Estamos utilizando el patron inmutable.
 *
 * @author Adolfo Barroso, Levi Orta, Juan Manuel Chaves
 */
public final class Reserva {

    //Atributos de la clase
    private String idReserva;
    private String fechaViaje;
    private Trayecto trayecto;
    private String horaSalida;
    private int numAsiento;

    /**
     * Constructor de la clase Reserva. Para poder crear una nueva reserva es
     * necesario establecer un identificador que sera unico para distinguir a la
     * reserva, fecha cuando se realizara el viaje, y el trayecto sobre el cual se
     * ha realizado la reserva y salida del viaje.
     *
     * @param idReserva: identificador de la reserva.
     * @param fechaViaje: fecha en la que se realizara el viaje.
     * @param t: treyecto que se desea reservar.
     * @param horaSalida: hora de salida del viaje.
     */
    public Reserva(String idReserva,LocalDate fechaViaje, Trayecto t, LocalTime horaSalida){
        this.idReserva =  idReserva;
        this.fechaViaje = fechaViaje.toString();
        this.trayecto = t;
        this.horaSalida = horaSalida.toString();
        this.numAsiento = -1;
    }

    /**
     * Constructor de la clase Reserva. Para poder crear una nueva reserva es
     * necesario establecer un identificador que sera unico para distinguir a la
     * reserva, fecha cuando se realizara el viaje, y el trayecto sobre el cual se
     * ha realizado la reserva y salida del viaje.
     *
     * @param idReserva: identificador de la reserva.
     * @param fechaViaje: fecha en la que se realizara el viaje.
     * @param t: treyecto que se desea reservar.
     * @param horaSalida: hora de salida del viaje.
     * @param numAsiento: numero del asiento a reservar
     */
    public Reserva(String idReserva,LocalDate fechaViaje, Trayecto t, LocalTime horaSalida, int numAsiento){
        this.idReserva =  idReserva;
        this.fechaViaje = fechaViaje.toString();
        this.trayecto = t;
        this.horaSalida = horaSalida.toString();
        this.numAsiento = numAsiento;
    }

    /**
     * Devuelve el identificador de la reserva.
     *
     * @return el idReserva
     */
    protected String getIdReserva() {
        return idReserva;
    }

    /**
     * Devuelve la fecha cuando se va a realizar el viaje reservado.
     *
     * @return la fechaViaje
     */
    protected LocalDate getFechaViaje() {
        return new LocalDate(fechaViaje);
    }

    /**
     * Devuelve el trayecto sobre el cual se ha realizado una reserva.
     *
     * @return el trayecto
     */
    protected Trayecto getTrayecto() {
        return trayecto;
    }

    /**
     * Devuelve la hora de salida del viaje sobre el cual se ha realizado una reserva.
     *
     * @return la hora de salida del viaje.
     */
    protected LocalTime getHoraSalida() {
        return new LocalTime(this.horaSalida);
    }

    /**
     * Devuelve el numeo de asiento de la reserva.
     *
     * @return numeo de asiento de la reserva.
     */
    public int getnumAsiento() {
        return this.numAsiento;
    }
}
